﻿//
// Lightbox Gallery Module for DotNetNuke
// Project Contributors - Will Strohl (http://www.WillStrohl.com), Armand Datema (http://www.schwingsoft.com)
//
//Copyright (c) 2009-2013, Will Strohl
//All rights reserved.
//
//Redistribution and use in source and binary forms, with or without modification, are 
//permitted provided that the following conditions are met:
//
//Redistributions of source code must retain the above copyright notice, this list of 
//conditions and the following disclaimer.
//
//Redistributions in binary form must reproduce the above copyright notice, this list 
//of conditions and the following disclaimer in the documentation and/or other 
//materials provided with the distribution.
//
//Neither the name of Will Strohl, Armand Datema, Lightbox Gallery, nor the names of its contributors may be 
//used to endorse or promote products derived from this software without specific prior 
//written permission.
//
//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
//EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
//OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
//SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 
//INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 
//TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
//BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
//CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
//ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 
//DAMAGE.
//

//INSTANT C# NOTE: Formerly VB project-level imports:

using DotNetNuke.Common;
using DotNetNuke.Common.Utilities;
using System;
using System.Text;
using System.Web.UI;
using DotNetNuke.UI.Skins;
using DotNetNuke.UI.Skins.Controls;
using DotNetNuke.Services.Exceptions;

namespace WillStrohl.Modules.Lightbox
{

    public partial class ChangeImageOrderView : WnsPortalModuleBase
    {

        #region  Private Members

        private string p_jQueryUIKey = "jQuery.ui";
        private string p_OrderHandler = string.Empty;
        private int p_LightboxId = Null.NullInteger;

        #endregion

        #region  Properties

        protected string OrderHandler
        {
            get
            {
                if (!(string.IsNullOrEmpty(this.p_OrderHandler)))
                {
                    return this.p_OrderHandler;
                }

                this.p_OrderHandler = string.Concat(this.ControlPath, "ImageOrder.ashx");

                return this.p_OrderHandler;
            }
        }

        protected int LightboxId
        {
            get
            {
                if (this.p_LightboxId > 0)
                {
                    return this.p_LightboxId;
                }

                int.TryParse(Request.QueryString["album"].ToString(), out this.p_LightboxId);

                return this.p_LightboxId;
            }
        }

        #endregion

        #region  Event Handlers

        /// <summary>
        /// OnInit - initialization of the module
        /// </summary>
        /// <param name="e"></param>
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }

        private void InitializeComponent()
        {
            //INSTANT C# NOTE: Converted event handler wireups:
            this.Load += new System.EventHandler(Page_Load);
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
            try
            {
                if (AllowedToEditModule() == false)
                {
                    Response.Redirect(GetDefaultViewUrl());
                }

                // if there aren't enough albums to re-order, send the visitor back to the main view
                CheckForImages();

                BindData();

                Page.Header.Controls.Add(new LiteralControl(string.Format(LightboxController.STYLESHEET_TAG_FORMAT, string.Concat(this.ControlPath, "js/fancybox/jquery.fancybox-1.3.4.css"))));
                
            }
            catch (Exception exc) // Module failed to load
            {
                Exceptions.ProcessModuleLoadException(this, exc, IsEditable);
            }
        }

        #endregion

        #region  Private Helper Functions

        private void BindData()
        {

            this.phOrder.Controls.Add(new LiteralControl(this.BuildImageList()));

            Skin.AddModuleMessage(this, this.GetLocalizedString("ChangeOrder.Text"), ModuleMessage.ModuleMessageType.BlueInfo);

        }
        
        private void HandleException(Exception exc)
        {
            Exceptions.LogException(exc);
            if (this.UserInfo.IsSuperUser || this.UserInfo.UserID == PortalSettings.AdministratorId)
            {
                Skin.AddModuleMessage(this, string.Concat(exc.Message, "<br />", exc.StackTrace), ModuleMessage.ModuleMessageType.RedError);
            }
            else
            {
                Skin.AddModuleMessage(this, exc.Message, ModuleMessage.ModuleMessageType.RedError);
            }
        }

        private void CheckForImages()
        {

            //Dim ctlModule As New LightboxController
            //Dim intCount As Integer = ctlModule.GetImageCount(Me.LightboxId)

            //If Not intCount > 1 Then

            //    Me.SendToDefaultView()

            //End If

        }

        private string BuildImageList()
		{

			var ctlModule = new LightboxController();
			var oLightbox = ctlModule.GetLightbox(this.LightboxId);
			var collImage = new ImageInfoCollection();
			collImage = ctlModule.GetImages(this.LightboxId);

			if (collImage != null && collImage.Count > 0)
			{

				var sb = new StringBuilder(10);
                
				sb.Append("<ul id=\"ulOrderImages\" class=\"ui-sortable\">");

				foreach(ImageInfo oImage in collImage)
				{

					sb.AppendFormat("<li id=\"{0}\" title=\"{1}\" class=\"wns-sortable ui-state-default\"><img src=\"{2}\" alt=\"{3}\" title=\"{3}\" /></li>", oImage.ImageId, oImage.Title, LightboxController.GetThumbnailImageName(string.Concat(this.PortalSettings.HomeDirectory, oLightbox.GalleryFolder, oImage.FileName), this.PortalSettings, true), oImage.Title);

				}

				sb.Append("</ul>");

				return sb.ToString();

			}

			return string.Format("<p class=\"Normal\">{0}</p>", this.GetLocalizedString("NoAlbums.Text"));

		}

        #endregion
    }

}